home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 15 / CU Amiga Magazine's Super CD-ROM 15 (1997)(EMAP Images)(GB)[!][issue 1997-10].iso / CUCD / Utilities / Post / Source / Activation.c next >
Encoding:
C/C++ Source or Header  |  1997-06-12  |  4.8 KB  |  232 lines

  1. #include "PostPre.h"
  2. #include "Global.h"
  3.  
  4. struct    BitMap    *tmpbitmap = NULL;
  5.  
  6. BOOL    createactivation(void)
  7. {
  8.     int    i, depth;
  9.  
  10.     parm.page.depth    = Options.PostOpts.depth;
  11.     parm.page.xsize    = Options.PostOpts.width;
  12.     parm.page.ysize    = bandrendering ? Options.PostOpts.bandsize : Options.PostOpts.height;
  13.     parm.page.ybase    = 0;
  14.     parm.page.yheight    = Options.PostOpts.height;
  15.     parm.page.xoff        = Options.PostOpts.xoff;
  16.     parm.page.yoff        = Options.PostOpts.yoff;
  17.     parm.page.xden        = Options.PostOpts.xdpi;
  18.     parm.page.yden        = Options.PostOpts.ydpi;
  19.     parm.page.ydir        = -1;
  20.  
  21.     parm.memvlen    = Options.PostOpts.vm;
  22.     parm.memflen    = Options.PostOpts.fonts;
  23.     parm.memllen    = Options.PostOpts.paths;
  24.     parm.memhlen    = Options.PostOpts.htone;
  25.  
  26.     parm.page.xbytes = (Options.PostOpts.width + 15) >> 3 & 0xfffffffe;
  27.     parm.page.len = parm.page.xbytes * parm.page.ysize;
  28.  
  29. /* Allocate the page buffer.  It  must be in chip memory if we are
  30.  * outputting to a screen */
  31.  
  32.     if(Options.graphiccard && parm.page.depth > 1) depth = parm.page.depth+1;
  33.     else depth = parm.page.depth;
  34.     InitBitMap(&bitmap, depth, parm.page.xsize, parm.page.ysize);
  35.     for (i = 0; i < 8; i++)
  36.     {
  37.         bitmap.Planes[i] = NULL;
  38.     }
  39.     if(argwindow)
  40.     {
  41.         if(os_3)
  42.         {
  43.             tmpbitmap = AllocBitMap(parm.page.xsize, parm.page.ysize, 
  44.                             depth, BMF_CLEAR, NULL);
  45.             if(tmpbitmap == NULL)
  46.             {
  47.                 okmsg("can't get page buffer");
  48.                 return(FALSE);
  49.             }
  50.             for (i = 0; i < parm.page.depth; i++)
  51.             {
  52.                 parm.page.buf[i] = tmpbitmap->Planes[i];
  53.             }
  54.             memcpy((char *) &bitmap, (char *) tmpbitmap, sizeof(struct BitMap));
  55.         }
  56.         else
  57.         {
  58.             for (i = 0; i < depth; i++)
  59.             {
  60.                 if((bitmap.Planes[i] = (PLANEPTR)
  61.                     AllocRaster(parm.page.xsize, parm.page.ysize)) == NULL)
  62.                 {
  63.                     okmsg("can't get page buffer");
  64.                     return(FALSE);
  65.                 }
  66.                 parm.page.buf[i] = bitmap.Planes[i];
  67.                 BltClear(bitmap.Planes[i], parm.page.len, 0x0);
  68.             }
  69.         }
  70.         if(parm.page.depth > 1)
  71.         {
  72. /* A Plane-Pointer with value -1 will be interpreted like a Plane with    *
  73.  * all pixels set. So we don't need the memory for the Plane :-).            *
  74.  * But some graphiccards don't work correctly this way, so we have to    *
  75.  * allocate a fake bitmap and set all pixels in it                             */
  76.  
  77.             if(Options.graphiccard)
  78.             {
  79.                 BltClear(bitmap.Planes[bitmap.Depth - 1], parm.page.len, 0xFFFF0005);
  80.             }
  81.             else
  82.             {
  83.                 bitmap.Depth++;
  84.                 bitmap.Planes[bitmap.Depth-1] = (char *) -1;
  85.             }
  86.         }
  87.     }
  88.     else
  89.     {
  90.         for (i = 0; i < parm.page.depth; i++)
  91.         {
  92.             if((bitmap.Planes[i] = (PLANEPTR)
  93.                 AllocMem(parm.page.len, MEMF_PUBLIC|MEMF_CLEAR)) == NULL)
  94.             {
  95.                 okmsg("can't get page buffer");
  96.                 return(FALSE);
  97.             }
  98.             parm.page.buf[i] = bitmap.Planes[i];
  99.         }
  100.         output_bitmap = bitmap;
  101.     }
  102.     parm.flushfunc = (APTR) flushpage;
  103.     parm.copyfunc = (APTR) copypage;
  104.  
  105.     if (confh)
  106.     {
  107.         parm.infh    = confh;
  108.         parm.outfh    = confh;
  109.         parm.errfh    = confh;
  110.     }
  111.     else
  112.     {
  113.         parm.infh    = Input();
  114.         parm.outfh    = Output();
  115.         parm.errfh    = errfh;
  116.     }
  117.  
  118.  
  119.     arec = PScreateact(&parm);
  120.     if (arec == 0)
  121.     {
  122.         okmsg("can't get memory");
  123.         return(FALSE);
  124.     }
  125.     else if ((unsigned) arec <= errmax)
  126.     {
  127.         okmsg("error during initiation in PScreateact");
  128.         arec = NULL;
  129.         return(FALSE);
  130.     }
  131.     return(TRUE);
  132. }
  133.  
  134. /* Interpret the argument files */
  135.  
  136. void    runstartupfiles(void)
  137. {
  138.     struct    Node *node;
  139.     char        directory[256];
  140.  
  141.     for(node = Options.startuplist.lh_Head; node->ln_Succ; node = node->ln_Succ)
  142.     {
  143.         getpath(directory, node->ln_Name);
  144.         changedir(directory);
  145.         sendmenu(PSACTSTARTUP, 0, 0, 0, node->ln_Name, directory);
  146.     }
  147. }
  148.  
  149. BOOL    openconwin(void)
  150. {
  151.     char    fname[256];
  152.  
  153.     if(Options.Screen.custscreen)
  154.     {
  155.         sprintf((char *) fname, "CON:0/0/640/100/PostIO.%d/AUTO/SCREEN%s%d", post_count, PSNAME, post_count);
  156.     }
  157.     else
  158.     {
  159.         sprintf((char *) fname, "CON:0/0/640/100/PostIO.%d/AUTO/SCREEN%s", post_count, pubscreenname);
  160.     }
  161.     confh = Open((char *) fname, MODE_NEWFILE);
  162.     if (confh == NULL)
  163.     {
  164.         okmsg("can't open console handler");
  165.         return(FALSE);
  166.     }
  167.     return(TRUE);
  168. }
  169.  
  170. void    deleteactivation(void)
  171. {
  172.     int    i, depth;
  173.     char    dummy[3];
  174.  
  175.     if(arec)
  176.     {
  177.         PSdeleteact(arec);
  178.         arec = NULL;
  179.     }
  180.     if (confh)
  181.     {
  182.         if(argcon && !argwindow && argverbose)
  183.         {
  184.             FPrintf(confh, "finished!\nPress return to quit!\n");
  185.             Read(confh, dummy, 1);
  186.         }
  187.         Close(confh);
  188.         confh = NULL;
  189.     }
  190.     if(argwindow)
  191.     {
  192.         if(Options.graphiccard && parm.page.depth > 1) depth = parm.page.depth+1;
  193.         else depth = parm.page.depth;
  194.         if(os_3  && tmpbitmap)
  195.         {
  196.             FreeBitMap(tmpbitmap);
  197.             tmpbitmap = NULL;
  198.         }
  199.         else
  200.         {
  201.             for (i = 0; i < depth; i++)
  202.             {
  203.                 if (bitmap.Planes[i])
  204.                 {
  205.                     FreeRaster(bitmap.Planes[i], parm.page.xsize, parm.page.ysize);
  206.                     parm.page.buf[i] = NULL;
  207.                     bitmap.Planes[i] = NULL;
  208.                 }
  209.             }
  210.         }
  211.     }
  212.     else
  213.     {
  214.         for (i = 0; i < parm.page.depth; i++)
  215.         {
  216.             if (parm.page.buf[i])
  217.             {
  218.                 FreeMem(parm.page.buf[i], parm.page.len);
  219.                 parm.page.buf[i] = NULL;
  220.             }
  221.         }
  222.     }
  223.     for (i = 0; i < 8; i++)
  224.     {
  225.         if (parm.page.buf[i])
  226.         {
  227.             parm.page.buf[i] = NULL;
  228.             bitmap.Planes[i] = NULL;
  229.         }
  230.     }
  231. }
  232.